package com.softeem.iterator;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 主要解决什么问题?
 * 我们之前在对list集合进行遍历的时候,如果要进行元素的移除,元素可能因为下标的改变导致元素
 * 无法顺利删除,所以现在使用迭代器进行遍历,迭代器可以解决集合中元素的移除问题
 * T:type 类型 一般放基本数据类型或者引用数据类型
 * E:element 元素
 * V:value 值
 * K:key 键
 */
public class IteratorDemo {
    public static void main(String[] args) {
        //list 集合是一个有存储顺序并且元素可以重复的集合
        List<String> list = new ArrayList<String>();
        list.add("张三");
        list.add("李四");
        list.add("王麻子");
        list.add("赵六");
        list.add("李四");
       /* for(int i = 0; i < list.size(); i++){
            String name = list.get(i);
            list.remove(name);
        }
        System.out.println(list);*///[赵六, 李四]

        //抛出一个ConcurrentModificationException
        //一个线程通常不允许修改集合，而另一个线程正在遍历它
        /*for(String s : list){
            list.remove(s);
        }*/
        /*System.out.println(list);*/
        //迭代器,作用就是遍历集合中的元素
        //迭代器是一个接口,不能创建对象,主要处理集合中遍历以及删除的问题,就到集合中查找这个方法相关的内容
        //Iterator<E> iterator()
        //  以正确的顺序返回该列表中的元素的迭代器。
        Iterator<String> it = list.iterator();
        //开始去遍历并且判断元素然后找到下一个元素实现删除的操作
        //循环的条件判断中,使用hasNext():用来判断是否有下一个元素
        while (it.hasNext()) {
            String name = it.next();//返回的是一个元素E
            //取出来删掉
            it.remove();
        }
        System.out.println(list);

    }
}
